public class SymmetricTree {
    public boolean isSymmetric(TreeNode root) {
        return isSymmetricChild(root, root);
    }

    public boolean isSymmetricChild(TreeNode p, TreeNode q) {
        // 1. 两个节点都为空, 对称
        if(p == null && q == null) {
            return true;
        }

        // 2. 一个节点为空, 另一个不为空, 不对称
        if(p == null || q == null) {
            return false;
        }

        // 3. 对称, 但值不正确, 不对称
        if(p.val != q.val) {
            return false;
        }

        // 4.左树的左节点是否等于右树的右节点
        //   左树的右节点是否等于右树的左节点
        return isSymmetricChild(p.left, q.right) && isSymmetricChild(p.right, q.left);
    }
}
